import Link from "next/link"; import { ArticleLoader } from "../../../../util/articleLoader"; import dateformat from "dateformat"; import { createPagenation } from "../../../../util/pagenation"; import { ArticleListElement } from "../../_components/articleListElement"; dateformat.i18n.dayNames = [ '日', '月', '火', '水', '木', '金', '土', '日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日' ]; type PageType = { searchParams: Record, params: { pageId: string, } } export async function generateMetadata(context: PageType) { const pageId = getPageIdNumber(context.params.pageId); return { title: `アキバ総研アーカイブ:ページ ${pageId}`, } } export default async function Page(context: PageType) { const pageId = getPageIdNumber(context.params.pageId); const al = new ArticleLoader() const loadedData = await al.loadData(); const chunkdData = chunk(loadedData, PPV); const displayData = chunkdData[pageId - 1]; return (
{pagenationElement(pageId, chunkdData.length)}
全:{loadedData.length}件
{ArticleListElement(displayData)} {pagenationElement(pageId, chunkdData.length)}
); } function pagenationElement(now: number, max: number) { const pagenationData = createPagenation({ now: now, max: max, between: 2 }); const liElements: JSX.Element[] = []; for (const v of pagenationData) { if (v.type == "back") { if (v.link == null) { liElements.push(
  • Previous
  • ); } else { liElements.push(
  • Previous
  • ); } } else if (v.type == "next") { if (v.link == null) { liElements.push(
  • Next
  • ); } else { liElements.push(
  • Next
  • ); } } else if (v.type == "num") { if (v.link == null) { if (v.num == now) { liElements.push(
  • {v.num}
  • ); } else { liElements.push(
  • {v.num}
  • ); } } else { liElements.push(
  • {v.num}
  • ); } } else if (v.type == "sp") {
  • ...
  • } } return ( ); } function getPageIdNumber(pageIdStr: string) { const m = pageIdStr.match(/page-(\d+)/)!; const id = Number(m[1]); return id; } const PPV = Number(process.env["AKIBA_SOUKEN_AR_ITEM_PPV"] ?? "100"); if (!Number.isInteger(PPV)) { throw new Error(`AKIBA_SOUKEN_AR_ITEM_PPVに整数をセットして下さい`); } //export const dynamicParams = true; export async function generateStaticParams() { const al = new ArticleLoader() const loadedData = await al.loadData(); const chunkdData = chunk(loadedData, PPV); return chunkdData.map((data, index) => { return { pageId: `page-${index + 1}`, data: data }; }); } function chunk(list: T[], len: number) { if (len <= 0) { throw new Error(); } const result: T[][] = []; for (let i = 0; i < list.length; i += len) { result.push(list.slice(i, i + len)); } return result; }